package com.opcoach.ecf2014.engine.ui.parts; import java.text.SimpleDateFormat; import java.util.Vector; import javax.annotation.PostConstruct; import javax.inject.Inject; import org.eclipse.e4.core.di.annotations.Optional; import org.eclipse.e4.ui.di.Focus; import org.eclipse.e4.ui.di.UIEventTopic; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import com.opcoach.ecf2014.engine.core.Alarm; import com.opcoach.ecf2014.engine.core.EngineWatcher; public class AlarmPart { @Optional @Inject private EngineWatcher engineWatcher; Vector<Alarm> alarms = new Vector<Alarm>(); private TableViewer viewer; @Inject public AlarmPart() { } @PostConstruct public void postConstruct(Composite parent) { viewer = new TableViewer(parent); final Table cTable = viewer.getTable(); cTable.setHeaderVisible(true); cTable.setLinesVisible(true); GridData gd_cTable = new GridData(SWT.FILL, SWT.FILL); gd_cTable.verticalAlignment = SWT.TOP; cTable.setLayoutData(gd_cTable); // Create the first column for date TableViewerColumn dateCol = new TableViewerColumn(viewer, SWT.CENTER); dateCol.getColumn().setWidth(80); dateCol.getColumn().setText("Date"); dateCol.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); return sdf.format(((Alarm) element).getWhen()); } }); // Create the second column for hour TableViewerColumn hourCol = new TableViewerColumn(viewer, SWT.NONE); hourCol.getColumn().setWidth(80); hourCol.getColumn().setText("Hour"); hourCol.getColumn().setAlignment(SWT.CENTER); hourCol.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); return sdf.format(((Alarm) element).getWhen()); } }); // Create the third column for details TableViewerColumn whatCol = new TableViewerColumn(viewer, SWT.NONE); whatCol.getColumn().setWidth(200); whatCol.getColumn().setText("What happened ?"); whatCol.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { return ((Alarm)element).getWhat(); } }); // Set input data and content provider (default ArrayContentProvider) viewer.setContentProvider(ArrayContentProvider.getInstance()); viewer.setInput(alarms); // Add a button to clear the viewer Composite buttonContainer = new Composite(parent, SWT.BORDER); buttonContainer.setLayout(new GridLayout(1, true)); Button clearButton = new Button(buttonContainer, SWT.PUSH); clearButton.setText("Clear alarms"); clearButton.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { alarms.clear(); viewer.refresh(); } @Override public void widgetDefaultSelected(SelectionEvent e) { } }); } @Inject @Optional public void listenToAlarms(@UIEventTopic(EngineWatcher.ALARM_TOPIC) Alarm a) { alarms.insertElementAt(a, 0); if (viewer != null) { viewer.refresh(); viewer.setSelection(new StructuredSelection(a)); } } @Focus public void onFocus() { viewer.getControl().setFocus(); } }